package com.hopu.haogoumall.vxapi.controller;

import com.hopu.haogoumall.core.utils.ResponseUtils;
import com.hopu.haogoumall.db.dto.CategoryGoodsDto;
import com.hopu.haogoumall.db.dto.GrouponRulesDto;
import com.hopu.haogoumall.db.module.*;
import com.hopu.haogoumall.db.service.VxHomeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Package: com.hopu.haogoumall.vxapi.controller
 * @ClassName: VxHomeController
 * @Author: xiaoBao
 * @CreateTime: 2020-12-11 15:12
 * @Description:【商城首页相关功能表现层】
 */
/** @RestController注解：定义表现层，并且在每个使用@RequestMapping注解的方法上自动添加@ResponseBody注解*/
@RestController
/** @RequestMapping注解：在类名上定义的@RequestMapping注解用于窄化（简化）请求路径；*/
@RequestMapping("/wx/")
public class VxHomeController {
    /** 通过工厂获取Logger日志对象用于输出日志信息*/
    Logger logger = LoggerFactory.getLogger(getClass());
    /** 引入Service业务层*/
    @Resource
    private VxHomeService vxHomeService;


    /**
     * homeInfo 【首页数据显示】：可搜索商品的总数量、广告轮播、商品分类、优惠券、团购专区、品牌直供商等；
     * @return 将全部首页信息通过返回协议封装所有集合返回给前台显示
     */
    @RequestMapping("home/index")
    public Object homeInfo(Integer pid,Integer couponPage,Integer couponLimit,Integer grouponPage,Integer grouponLimit,Integer brandPage,Integer brandLimit,Integer newGoodPage,Integer newGoodLimit,Integer hotGoodPage,Integer hotGoodLimit,Integer topicPage,Integer topicLimit,Integer floorGoodPage,Integer floorGoodLimit){
        /** 调用业务层操作：查询商品总数量*/
        int goodsCount = vxHomeService.findGoodsCount();

        /** 调用业务层操作：查询所有广告信息*/
        List<HaogoumallAd> bannerList = vxHomeService.findBannerInfo();

        /** 调用业务层操作：查询所有商品分类*/
        List<HaogoumallCategory> categoryList = vxHomeService.findCategoryInfo(pid);

        /** 调用业务层操作：查询所有优惠券信息   传递两个参数：1、优惠券的当前页   2、每页显示的数量*/
        List<HaogoumallCoupon> couponList = vxHomeService.findCouponInfo(couponPage,couponLimit);

        /** 调用业务层操作：查询所有团购信息   传递两个参数：1、团购信息的当前页   2、每页显示的数量*/
        List<GrouponRulesDto> grouponList = vxHomeService.findGrouponInfo(grouponPage,grouponLimit);

        /** 调用业务层操作：查询所有品牌直供商相关信息   传递两个参数：1、品牌直供商信息的当前页   2、每页显示的数量*/
        List<HaogoumallBrand> brandList = vxHomeService.findBrandInfo(brandPage,brandLimit);

        /** 调用业务层操作：查询所有新品发售商品  传递两个参数：1、新品发售商品的当前页   2、每页显示的数量*/
        List<HaogoumallGoods> newGoodList = vxHomeService.findNewGoodsInfo(newGoodPage,newGoodLimit);

        /** 调用业务层操作：查询所有人气商品  传递两个参数：1、人气商品的当前页   2、每页显示的数量*/
        List<HaogoumallGoods> hotGoodList = vxHomeService.findHotGoodsInfo(hotGoodPage,hotGoodLimit);

        /** 调用业务层操作：查询所有专题精选商品  传递两个参数：1、专题精选商品的当前页   2、每页显示的数量*/
        List<HaogoumallTopic> topicList = vxHomeService.findTopicInfo(topicPage,topicLimit);

        /** 调用业务层操作：查询每个分类的部分商品显示在首页 传递两个参数：1、每个分类的当前页  2、每页显示的数量  3、父级分类名称的Pid*/
        List<CategoryGoodsDto> floorGoodList = vxHomeService.findFloorGoodInfo(floorGoodPage,floorGoodLimit,pid);

        // 实例化一个Map集合将查询到的数据集合存入集合中，用于一次性将所有集合的信息返回给前台；
        Map<String,Object> itemInfo = new HashMap<>();
        itemInfo.put("goodsCount",goodsCount);
        itemInfo.put("bannerList",bannerList);
        itemInfo.put("categoryList",categoryList);
        itemInfo.put("couponList",couponList);
        itemInfo.put("grouponList",grouponList);
        itemInfo.put("brandList",brandList);
        itemInfo.put("newGoodList",newGoodList);
        itemInfo.put("hotGoodList",hotGoodList);
        itemInfo.put("topicList",topicList);
        itemInfo.put("floorGoodList",floorGoodList);

        /** 将首页需要显示的数据，使用返回协议工具类返回给前台*/
        return ResponseUtils.ok(itemInfo);
    }
}
